package com.lgcns.andteam2.todaymenu.info;

import java.util.HashMap;

import android.content.Context;
import android.text.TextUtils;

import com.lgcns.andteam2.todaymenu.Constants;
import com.lgcns.andteam2.todaymenu.Util;
import com.lgcns.andteam2.todaymenu.db.QueryHelper;

/**
 * 사용자가 선택한 사업자 정보를 가지고 있는 Singleton Class.
 */
public class PlaceInfo {
    private static PlaceInfo instance = new PlaceInfo();
    private String placeId;
    private String place;
    private Object lock = new Object();
    
    private PlaceInfo() {
    }
    
    /**
     * 내 사업장 정보를 얻는다. 설정값이 없는 경우 기본값은 맨 처음 조회되는 사업장을 기본으로 설정하고,
     * Preference에도 저장한다.
     * @param context
     * @return
     */
    public static PlaceInfo getInstance(Context context) {
        if(TextUtils.isEmpty(instance.placeId)) {
            synchronized(instance.lock) {
                instance.placeId = Util.getPreferenceStringValue(context, Constants.PREF_PLACE_ID, null);
                if(!TextUtils.isEmpty(instance.placeId)) {
                    instance.place = QueryHelper.getPlace(context, instance.placeId);
                } else {
                    HashMap<String, String[]> map = QueryHelper.getPlaceList(context);
                    String[] placeId = map.get("placeId");
                    String[] place = map.get("place");
                    instance.placeId = placeId.length > 0 ? placeId[0] : null;
                    instance.place = place.length > 0 ? place[0] : null;
                    
                    Util.savePreference(context, Constants.PREF_PLACE_ID, instance.placeId);
                }
            }
        }
        
        return instance;
    }
    
    public String getPlace() {
        return place;
    }
    
    public String getPlaceId() {
        return placeId;
    }
    
    /**
     * PlaceInfo의 사업장, 사업장 ID 정보를 설정한다.
     * 대부분의 경우 MyPlaceInfo로 부터 사업장 정보를 얻게 되므로, 
     * 사업장 설정이 변경되는 경우 반드시 PlaceInfo에도 반영해 주어야 한다.
     * @param placeId
     * @param place
     */
    public void setPlaceInfo(String placeId, String place) {
        synchronized (lock) {
            this.placeId = placeId;
            this.place = place;
        }
    }
}
